package com.tarena.luban.test.rocketmq;

import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.junit.Test;

import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

@Slf4j
public class MyProducer {
    private boolean runEnable=true;

    /**
     * 向 rocketmq发送一个消息
     */
    @Test
    public void sendTest01() throws Exception {
    //1.准备一个生产者对象,连接nameserver
        DefaultMQProducer producer=new DefaultMQProducer();
        //设置属性,连接nameserver localhost:9876 消息发送给broker了
        producer.setNamesrvAddr("localhost:9876");
        //要求生产者进程和消费者进程都要分组
        producer.setProducerGroup("producer-group-01");
        //开启长链接
        producer.start();
    //2.准备一个消息对象,封装我们要传递的信息
        //理论可以在消息对象中封装任意数据
        String messageTxt="携带了keys的消息";
        //创建一个消息对象
        Message message=new Message();
        //携带的消息body
        message.setBody(messageTxt.getBytes(StandardCharsets.UTF_8));
        //设置消息主题,和业务功能有关的
        message.setTopic("topic-01");
        //设置keys
        List<String> keys=new ArrayList<>();
        keys.add("tedu");
        keys.add("tarena");
        message.setKeys(keys);
        //设置标签
        message.setTags("tag1");
    //3.调用api方法将消息发送,并且可以获取发送结果数据
        SendResult result = producer.send(message);
        //接收的Result结果 包括一个创建消息的id值,包括 本次消息发送到的broker 发送到的队列
        //等
        log.info("队列信息:{}",result.getMessageQueue().toString());//队列信息
        log.info("消息id:{}",result.getMsgId());//消息id
        log.info("发送状态:{}",result.getSendStatus());//发送的状态
        log.info("区域信息:{}",result.getRegionId());
        //每次运行send 生产消息逻辑 不让线程自动停止
        //while(runEnable);
    }
}
